package com.sh.learn.extjs.dao;

import java.util.LinkedHashMap;
import java.util.List;
import com.sh.common.page.PageBean;
import com.sh.common.page.QueryResult;

public interface BasicDao<T>{

	/**
	 * 获取分页
	 * firstIndex 开始索引（0开始）
	 * maxResult 取多少条记录
	 * orderby，带顺序的HashMap，K是属性名，V是升序还是降序
	 * where，查询参数，正常的做法是String whereSql, Object[] params，比如：对普通属性 is null 就不能用了，对对象属性，也只能传的了有数值ID的对象
	 */
	public QueryResult<T> getScrollData(final Class<T> entityClass, final int firstIndex, final int maxResult, final LinkedHashMap<String, ?> where, final LinkedHashMap<String, String> orderby);

	/**
	 * 获取列表
	 */
	public QueryResult<T> getScrollData(final Class<T> entityClass, final LinkedHashMap<String, ?> where, final LinkedHashMap<String, String> orderby);

	/**
	 * 获取分页
	 */
	public PageBean findPage(final String sql, final Object[] params, final String resultMappingName, int currentPage, int pageSize);

	/**
	 * 获取列表
	 */
	public List<?> findAll(final String sql, final Object[] params, final String resultMappingName);

	/**
	 * 获得单个
	 */
	public T findById(final Class<T> entityClass, final Object entityId);

	/**
	 * 添加
	 */
	public void insert(final T entity);

	/**
	 * 修改
	 */
	public void update(final T entity);

	/**
	 * 删除
	 */
	public void delete(final T entity);

	/**
	 * 删除
	 */
	public void deleteById(final Class<T> entityClass, final Object entityId);

	/**
	 * 批量操作
	 */
	public void batchExcute(final List<T> entitys);

	/**
	 * 写入数据库
	 */
	public void flush();

	/**
	 * 获得数量
	 */
	public int getCount(final String sql, final Object[] params);

}